import { AppService } from './app.service';
import {
  Controller,
  Post,
  UseInterceptors,
  UploadedFiles,
  Body,
} from '@nestjs/common';
import { diskStorage } from 'multer';
import { extname, join } from 'path';
import { FilesInterceptor } from '@nestjs/platform-express'; // 注意是FilesInterceptor（复数）
import { FileValidationPipe } from './piepe/file-validation.pipe';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Post('upload')
  // 使用FilesInterceptor并指定可上传的最大文件数量（例如10个）
  @UseInterceptors(
    FilesInterceptor('file', 10, {
      // 第一个参数是字段名，第二个是最大文件数
      storage: diskStorage({
        destination: join(__dirname, '..', 'uploads'),
        filename: (req, file, callback) => {
          const uniqueSuffix =
            Date.now() + '-' + Math.round(Math.random() * 1e9);
          const extension = extname(file.originalname);
          const filename = `${uniqueSuffix}${extension}`;
          callback(null, filename);
        },
      }),
    }),
  )
  // 使用@UploadedFiles装饰器接收多个文件
  uploadFiles(
    @UploadedFiles(FileValidationPipe) files: Express.Multer.File[], // 注意是数组类型
    @Body() body,
  ) {
    console.log('body', body);
    console.log('files', files);

    // 为每个文件生成访问URL
    const fileUrls = files.map((file) => ({
      filename: file.filename,
      url: `http://localhost:3000/uploads/${file.filename}`,
    }));

    return {
      message: `${files.length}个文件上传成功`,
      files: fileUrls,
    };
  }
}
